package com.xbts.system.service;

import com.huaweicloud.sdk.osm.v2.model.*;
import com.xbts.common.core.domain.AjaxResult;
import com.xbts.system.domain.CnUserCases;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author llk
 * @Date 2023/8/9 14:27
 */
public interface ICloudCasesService {

    // 默认的产品类型ID
    String defaultProductCategoryId = "9e8913b629144ad4bfe6250cdea40f21";

    /**
     * 查询工单问题类型列表
     * @return 工单问题类型列表
     */
    ListProblemTypesResponse listProblemTypes(ListProblemTypesRequest listProblemTypesRequest);

    /**
     * 工单列表
     * @param listCasesRequest 工单列表请求参数
     * @return 工单列表
     */
    AjaxResult listCases(ListCasesRequest listCasesRequest);

    /**
     * 创建工单
     * @param createCasesRequest 创建工单请求参数
     * @return 操作结果
     */
    AjaxResult createCases(CreateCasesRequest createCasesRequest);

    /**
     * 查询用户关联的region
     * @return 查询用户关联的region
     */
    AjaxResult listCustomersRegions();

    /**
     * 查询工单详情
     * @param showCaseDetailRequest 工单详情请求参数
     * @return 工单详情
     */
    AjaxResult showCaseDetail(ShowCaseDetailRequest showCaseDetailRequest);

    /**
     * 上传附件
     *
     * @param file
     * @return  上传附件结果
     */
    AjaxResult uploadJsonAccessories(MultipartFile file);

    /**
     * 提交评分
     * @param createScoresRequest 提交评分请求参数
     * @return 提交评分结果
     */
    AjaxResult createScores(CreateScoresRequest createScoresRequest);

    /**
     * 设置消息已读
     * @param updateNewInstantMessagesReadRequest 设置消息已读请求参数
     * @return 设置消息已读结果
     */
    AjaxResult updateNewInstantMessagesRead(UpdateNewInstantMessagesReadRequest updateNewInstantMessagesReadRequest);

    /**
     * 查询未读消息
     * @param listUnreadNewInstantMessagesRequest 查询未读消息请求参数
     * @return 查询未读消息结果
     */
    AjaxResult listUnreadNewInstantMessages(ListUnreadNewInstantMessagesRequest listUnreadNewInstantMessagesRequest);

    /**
     * 提交留言
     * @param createMessagesRequest 提交留言请求参数
     * @return 提交留言结果
     */
    AjaxResult createMessages(CreateMessagesRequest createMessagesRequest);

    /**
     * 撤回消息
     * @param revokeMessageRequest 撤回消息请求参数
     * @return 撤回消息结果
     */
    AjaxResult revokeMessage(RevokeMessageRequest revokeMessageRequest);

    /**
     * 查询消息列表
     * @param listMessagesRequest  查询消息列表请求参数
     * @return 查询消息列表结果
     */
    AjaxResult listMessages(ListMessagesRequest listMessagesRequest);

    /**
     * 查询更多消息
     * @param listMoreInstantMessagesRequest    查询更多消息请求参数
     * @return 查询更多消息结果
     */
    AjaxResult listMoreInstantMessages(ListMoreInstantMessagesRequest listMoreInstantMessagesRequest);

    /**
     * 轮询查询即时消息
     * @param listNewInstantMessagesRequest 轮询查询即时消息请求参数
     * @return 轮询查询即时消息结果
     */
    AjaxResult listNewInstantMessages(ListNewInstantMessagesRequest listNewInstantMessagesRequest);

    /**
     * 获取验证码
     * @param sendVerifyCodesRequest 获取验证码请求参数
     * @return 获取验证码结果
     */
    AjaxResult sendVerifyCodes(SendVerifyCodesRequest sendVerifyCodesRequest);

    /**
     * 查询已验证的列表
     * @param listHasVerifiedContactsRequest 查询已验证的列表请求参数
     * @return 查询已验证的列表结果
     */
    ListHasVerifiedContactsResponse listHasVerifiedContacts(ListHasVerifiedContactsRequest listHasVerifiedContactsRequest);

    /**
     * 验证联系方式
     * @param checkVerifyCodesRequest 验证联系方式请求参数
     * @return 验证联系方式结果
     */
    AjaxResult checkVerifyCodes(CheckVerifyCodesRequest checkVerifyCodesRequest);

    /**
     * 是否需要验证
     * @return 是否需要验证
     */
    CheckNeedVerifyResponse checkNeedVerify(CheckNeedVerifyRequest checkNeedVerifyRequest);

    /**
     * 删除附件
     * @param deleteAccessoriesRequest 删除附件请求参数
     * @return 删除附件结果
     */
    AjaxResult deleteAccessories(DeleteAccessoriesRequest deleteAccessoriesRequest);

    /**
     * 下载附件
     * @param downloadAccessoriesRequest   下载附件请求参数
     * @param response 下载附件响应参数
     */
    void downloadAccessories(DownloadAccessoriesRequest downloadAccessoriesRequest, HttpServletResponse response);

    /**
     * 图片展示
     * @param downloadImagesRequest 图片展示请求参数
     * @param response
     */
    void downloadImages(DownloadImagesRequest downloadImagesRequest, HttpServletResponse response);

    /**
     * 附件限制
     * @param showAccessoryLimitsRequest   附件限制请求参数
     * @return 附件限制结果
     */
    AjaxResult showAccessoryLimits(ShowAccessoryLimitsRequest showAccessoryLimitsRequest);

    /**
     * 本系统中用户查询工单列表
     * @param cnUserCases  查询工单列表请求参数
     * @return 查询工单列表结果
     */
    List<CnUserCases> sysListCases(CnUserCases cnUserCases);

    /**
     * 查询某个工单状态
     * @param showCaseStatusRequest 查询某个工单状态请求参数
     * @return 查询某个工单状态结果
     */
    Integer showCaseStatus(ShowCaseStatusRequest showCaseStatusRequest);
}
